Interfaces

Interface and Specification


인터페이스(interface)는 제공하는 연산과 그 의미를 정하며 ADT라고도 부른다. 명세(specification)는 각 연산의 입력, 반환값, 적용 조건, 상태 변화를 정한다.

클라이언트 코드(client code)자료구조를 호출하는 코드이며, 공개된 연산의 결과에만 의존해야 한다.
인터페이스와 명세호출 형식과 의미를 고정한다.
구현(implementation)경계 안에서 값을 저장하고 연산을 실행하는 코드다.

한 연산이 네 계층을 관통한다

길이 3인 리스트 [3, 5, 8]에서 한 연산은 클라이언트 코드의 호출부터 배열 구현까지 같은 경로를 지난다. 내부 필드는 인터페이스 밖에서 보이지 않는다.

리스트 연산
클라이언트는 시그니처와 명세에 의존하며 내부 필드 이름에는 의존하지 않는다.

읽기와 삽입의 인덱스 경계는 다르다

길이 3인 List에서 조회와 삽입에 허용되는 인덱스 범위는 서로 다르다.

get, set, remove
012

0 ≤ i < n

add
0123

0 ≤ i ≤ n

길이 n = 3인 리스트 [3, 5, 8]의 인덱스다. 점선 칸 3은 삽입에만 허용되는 끝 위치이고, 초록 테두리 카드가 고른 호출에 적용되는 범위다.

클라이언트 코드는 공개된 연산만으로 일을 한다

swap_first_two(seq)는 get과 set만 호출해 앞의 두 값을 바꾼다.

초록 칸은 방금 호출이 읽거나 바꾼 위치다.